unit URelatorioClientesVSCompras;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UrelatorioBase, RLPDFFilter, RLXLSFilter, RLFilters,
  RLHTMLFilter, RLDraftFilter, DB, DBTables, RLReport, StdCtrls, ExtCtrls,
  Buttons, Mask, ToolEdit, RXDBCtrl;

type
  TFRelatorioClientesVSCompras = class(TFrelatorioBase)
    RLBand2: TRLBand;
    RLDBText2: TRLDBText;
    RLDBText3: TRLDBText;
    RLDBText4: TRLDBText;
    RLDBText5: TRLDBText;
    RLDBText6: TRLDBText;
    RLBand3: TRLBand;
    RLDBText7: TRLDBText;
    RLDBText8: TRLDBText;
    RLDBText9: TRLDBText;
    RLDBText10: TRLDBText;
    RLDBText11: TRLDBText;
    RLBand4: TRLBand;
    RLDBText12: TRLDBText;
    RLDBText13: TRLDBText;
    RLDBText14: TRLDBText;
    RLDBText15: TRLDBText;
    RLDBText16: TRLDBText;
    Label4: TLabel;
    edCidade: TEdit;
    ComboBox1: TComboBox;
    RadioGroup1: TRadioGroup;
    Label5: TLabel;
    edEstado: TEdit;
    ComboBox2: TComboBox;
    RadioGroup2: TRadioGroup;
    GroupBox3: TGroupBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    RLBand5: TRLBand;
    RLLabel1: TRLLabel;
    RLLabel2: TRLLabel;
    RLLabel3: TRLLabel;
    RLLabel4: TRLLabel;
    RLLabel5: TRLLabel;
    RLDBText17: TRLDBText;
    RLLabel6: TRLLabel;
    RLDBText18: TRLDBText;
    RLDBText19: TRLDBText;
    CheckBox1: TCheckBox;
    CheckBox4: TCheckBox;
    GroupBox4: TGroupBox;
    DateEdit1: TDateEdit;
    DateEdit2: TDateEdit;
    procedure btnPesquisarClick(Sender: TObject);
    procedure RLDBText11BeforePrint(Sender: TObject; var Text: String;
      var PrintIt: Boolean);
    procedure RLDBText16BeforePrint(Sender: TObject; var Text: String;
      var PrintIt: Boolean);
    procedure RLBand4BeforePrint(Sender: TObject; var PrintIt: Boolean);
    procedure RLBand3BeforePrint(Sender: TObject; var PrintIt: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
    procedure btnExecutarClick(Sender: TObject);

    procedure CheckBox4Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FRelatorioClientesVSCompras: TFRelatorioClientesVSCompras;

implementation

uses UGeral;

{$R *.dfm}

procedure TFRelatorioClientesVSCompras.btnPesquisarClick(Sender: TObject);
const
  ctPesquisa =
    'SELECT'#10+
    '  CLIENTE.CLI_CODIGO,'#10+
    '  CLIENTE.CLI_RAZAO,'#10+
    '  CLIENTE.CLI_FANTASIA,'#10+
    '  CLIENTE.CLI_CPFCNPJ,'#10+
    '  CLIENTE.CLI_INSCESTADUAL,'#10+
    '  CLIENTE.CLI_FONE,'#10+
    '  CLIENTE.CLI_FAX,'#10+
    '  CLIENTE.CLI_EMAIL,'#10+
    '  CLIENTE.CLI_ENDERECOCORRESP,'#10+
    '  CLIENTE.CLI_BAIRROCORRESP,'#10+
    '  CLIENTE.CLI_CEPCORRESP,'#10+
    '  CLIENTE.CLI_CIDADECORRESP,'#10+
    '  CLIENTE.CLI_ESTADOCORRESP,'#10+
    '  CLIENTE.CLI_ENDERECOPEDIDO,'#10+
    '  CLIENTE.CLI_BAIRROPEDIDO,'#10+
    '  CLIENTE.CLI_CEPPEDIDO,'#10+
    '  CLIENTE.CLI_CIDADEPEDIDO,'#10+
    '  CLIENTE.CLI_ESTADOPEDIDO,'#10+
    '  CLIENTE.CLI_VENDEDOR,'#10+
    '  CLIENTE.CLI_CONTATO,'#10+
    '  CLIENTE.CLI_SITUACAO,'#10+
    '  CLIENTE.CLI_TIPO_ENDERECO_CORRESP,'#10+
    '  CLIENTE.CLI_TIPO_ENDERECO_PEDIDO,'#10+
    '  CLIENTE.CLI_NUMERO_ENDERECO_CORRESP,'#10+
    '  CLIENTE.CLI_NUMERO_ENDERECO_PEDIDO,'#10+
    '  MAX(PEDIDOVENDA.PED_DATA) AS ULTIMA_COMPRA'#10+
    'FROM'#10+
    '  CLIENTE'#10+
    '  LEFT  JOIN PEDIDOVENDA ON (CLIENTE.CLI_CODIGO = PEDIDOVENDA.PED_CLIENTE)'#10+
    '                        AND (PEDIDOVENDA.PED_SITUACAO = 1)'#10+
    '                        AND (PEDIDOVENDA.EXCLUIDO <> ''S'' OR PEDIDOVENDA.EXCLUIDO IS NULL)'#10+
    'WHERE'#10+
    '  (CLIENTE.EXCLUIDO <> ''S'' OR CLIENTE.EXCLUIDO IS NULL)%s %s'#10+
    'GROUP BY'#10+
    '  CLIENTE.CLI_CODIGO,'#10+
    '  CLIENTE.CLI_RAZAO,'#10+
    '  CLIENTE.CLI_FANTASIA,'#10+
    '  CLIENTE.CLI_CPFCNPJ,'#10+
    '  CLIENTE.CLI_INSCESTADUAL,'#10+
    '  CLIENTE.CLI_FONE,'#10+
    '  CLIENTE.CLI_FAX,'#10+
    '  CLIENTE.CLI_EMAIL,'#10+
    '  CLIENTE.CLI_ENDERECOCORRESP,'#10+
    '  CLIENTE.CLI_BAIRROCORRESP,'#10+
    '  CLIENTE.CLI_CEPCORRESP,'#10+
    '  CLIENTE.CLI_CIDADECORRESP,'#10+
    '  CLIENTE.CLI_ESTADOCORRESP,'#10+
    '  CLIENTE.CLI_ENDERECOPEDIDO,'#10+
    '  CLIENTE.CLI_BAIRROPEDIDO,'#10+
    '  CLIENTE.CLI_CEPPEDIDO,'#10+
    '  CLIENTE.CLI_CIDADEPEDIDO,'#10+
    '  CLIENTE.CLI_ESTADOPEDIDO,'#10+
    '  CLIENTE.CLI_VENDEDOR,'#10+
    '  CLIENTE.CLI_CONTATO,'#10+
    '  CLIENTE.CLI_SITUACAO,'#10+
    '  CLIENTE.CLI_TIPO_ENDERECO_CORRESP,'#10+
    '  CLIENTE.CLI_TIPO_ENDERECO_PEDIDO,'#10+
    '  CLIENTE.CLI_NUMERO_ENDERECO_CORRESP,'#10+
    '  CLIENTE.CLI_NUMERO_ENDERECO_PEDIDO %s %s';

var
  Filtro     : String;
  Filtro1    : String;
  Filtro2    : String;
  tipoFiltro : String;
  tipoFiltro2 : String;
  ordem      : String;

begin

  Filtro1 := '';
  Filtro  := '';

  {if edDias.Text <> '' then
  begin
    Filtro := 'HAVING (MAX(PEDIDOVENDA.PED_DATA) <= '+ QuotedStr(FormatDateTime('mm/dd/yyyy', now - StrToInt(edDias.Text))) + ')';
  {
    if CheckBox1.Checked then
      Filtro := Filtro + ' OR (MAX(PEDIDOVENDA.PED_DATA) IS NULL)'
    else
      Filtro := Filtro + ' AND (MAX(PEDIDOVENDA.PED_DATA) IS NOT NULL)';

   case RadioGroup3.ItemIndex of
    0:Filtro := Filtro + ' OR (MAX(PEDIDOVENDA.PED_DATA) IS NULL)';
    1:Filtro := Filtro + ' AND (MAX(PEDIDOVENDA.PED_DATA) IS NOT NULL)';
    2:Filtro := Filtro + ' OR (MAX(PEDIDOVENDA.PED_DATA) IS NULL)' ;
   end;

  end else if (RadioGroup3.ItemIndex = 0) then
    Filtro := ' HAVING (MAX(PEDIDOVENDA.PED_DATA) IS NULL)'
  else if (RadioGroup3.ItemIndex = 1)then
    Filtro := ' HAVING (MAX(PEDIDOVENDA.PED_DATA) IS NOT NULL)'
  else
    Filtro := '';  }

  if CheckBox1.Checked = false then
  begin

      if CheckBox4.Checked = false then
      begin

        Filtro := '';

      end else begin
       //EMANUEL
       //Filtro := Filtro+'HAVING ((MAX(PEDIDOVENDA.PED_DATA) >= '+QuotedStr(FormatDateTime('mm/dd/yyyy 00:00:00',DateEdit1.Date))+')'+
         //                   'AND (MAX(PEDIDOVENDA.PED_DATA) <= '+QuotedStr(FormatDateTime('mm/dd/yyyy 23:59:59',DateEdit2.Date))+'))';

      end;

  end else begin

    if CheckBox4.Checked = false then
      begin

        Filtro := ' HAVING (MAX(PEDIDOVENDA.PED_DATA) IS NULL)';

      end else begin

        Filtro := '';

      end;

  end;

{  end else if CheckBox1.Checked then
    Filtro := ' HAVING (MAX(PEDIDOVENDA.PED_DATA) IS NULL)'
  else
    Filtro := '';
  }

  case ComboBox1.ItemIndex of
    0:tipoFiltro := ' STARTING ';
    1:tipoFiltro := ' NOT STARTING ';
    2:tipoFiltro := ' CONTAINING ';
  end;

  if edCidade.Text <> '' then
    Filtro1 := 'AND((CLI_CIDADECORRESP '+ tipoFiltro + QuotedStr(edCidade.Text) +') OR (CLI_CIDADEPEDIDO '+ tipoFiltro + QuotedStr(edCidade.Text) +'))';


  if CheckBox1.Checked = false AND CheckBox4.Checked = true then
  begin

    if (DateEdit1.Date <> 0) and (DateEdit2.Date = 0) then
      Filtro := Filtro + 'HAVING (MAX(PEDIDOVENDA.PED_DATA) >= '+QuotedStr(FormatDateTime('mm/dd/yyyy 00:00:00',DateEdit1.Date))+')';



    if (DateEdit2.Date <> 0) and(DateEdit2.Date = 0) then
      Filtro := Filtro + 'HAVING (MAX(PEDIDOVENDA.PED_DATA) <= '+QuotedStr(FormatDateTime('mm/dd/yyyy 23:59:59',DateEdit2.Date))+')';

    if ((DateEdit2.Date <> 0) and (DateEdit2.Date <> 0)) then
     begin
      Filtro := Filtro+'HAVING ((MAX(PEDIDOVENDA.PED_DATA) >= '+QuotedStr(FormatDateTime('mm/dd/yyyy 00:00:00',DateEdit1.Date))+')'+
                       'AND (MAX(PEDIDOVENDA.PED_DATA) <= '+QuotedStr(FormatDateTime('mm/dd/yyyy 23:59:59',DateEdit2.Date))+'))';
     end;

  end;


//////////////////////////////////////

  case ComboBox2.ItemIndex of
    0:tipoFiltro2 := ' STARTING ';
    1:tipoFiltro2 := ' NOT STARTING ';
    2:tipoFiltro2 := ' CONTAINING ';
  end;

  if edestado.Text <> '' then
    Filtro2 :=' AND(CLI_ESTADOCORRESP '+ tipoFiltro2 + QuotedStr(edEstado.Text) +' OR CLI_ESTADOPEDIDO '+ tipoFiltro2 + QuotedStr(edEstado.Text) +')';

//////////////////////////////////////



  case RadioGroup1.ItemIndex of
    0:ordem := ' ORDER BY CLIENTE.CLI_CODIGO';
    1:ordem := ' ORDER BY CLIENTE.CLI_RAZAO';
    2:ordem := ' ORDER BY CLIENTE.CLI_FANTASIA';
    3:ordem := ' ORDER BY CLIENTE.CLI_CIDADECORRESP, CLIENTE.CLI_CIDADEPEDIDO';
  end;

  if RadioGroup2.Enabled then
  begin
    case RadioGroup2.ItemIndex of
     0:ordem := ordem + ' ,CLIENTE.CLI_CODIGO';
     1:ordem := ordem + ' ,CLIENTE.CLI_RAZAO';
     2:ordem := ordem + ' ,CLIENTE.CLI_FANTASIA';
    end;
  end;

  QPesquisa.Close;
  QPesquisa.SQL.Clear;
  QPesquisa.SQL.Add(Format(ctPesquisa, [Filtro1,Filtro2,Filtro, ordem]));
  QPesquisa.Open;

  inherited;

  gravaIni(Self.Name, ComboBox1.Name, intToStr(ComboBox1.ItemIndex));
  gravaIni(Self.Name, CheckBox1.Name, BoolToStr(CheckBox1.Checked));
  gravaIni(Self.Name, RadioGroup1.Name, IntToStr(RadioGroup1.ItemIndex));
  //gravaIni(Self.Name, edDias.Name, edDias.Text);


end;

procedure TFRelatorioClientesVSCompras.RLDBText11BeforePrint(Sender: TObject;
  var Text: String; var PrintIt: Boolean);
begin
  inherited;
  Text := Text + '/' + QPesquisa.FieldByName('CLI_ESTADOCORRESP').AsString;
end;

procedure TFRelatorioClientesVSCompras.RLDBText16BeforePrint(Sender: TObject;
  var Text: String; var PrintIt: Boolean);
begin
  inherited;
  Text := Text + '/' + QPesquisa.FieldByName('CLI_ESTADOPEDIDO').AsString;
end;

procedure TFRelatorioClientesVSCompras.RLBand4BeforePrint(Sender: TObject;
  var PrintIt: Boolean);
begin
  inherited;
  PrintIt := trim(QPesquisa.FieldByName('CLI_ENDERECOPEDIDO').AsString) <> '';
end;

procedure TFRelatorioClientesVSCompras.RLBand3BeforePrint(Sender: TObject;
  var PrintIt: Boolean);
begin
  inherited;
  PrintIt := trim(QPesquisa.FieldByName('CLI_ENDERECOCORRESP').AsString) <> '';
end;

procedure TFRelatorioClientesVSCompras.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  FRelatorioClientesVSCompras.Release;
  FRelatorioClientesVSCompras := Nil;
end;

procedure TFRelatorioClientesVSCompras.FormShow(Sender: TObject);
begin
  inherited;
  if leIni(Self.Name, ComboBox1.Name) <> '' then
    ComboBox1.ItemIndex := strToInt(leIni(Self.Name, ComboBox1.Name));

  if leIni(Self.Name, CheckBox1.Name) <> '' then
    CheckBox1.Checked := StrToBool(leIni(Self.Name, CheckBox1.Name));

  if leIni(Self.Name, RadioGroup1.Name) <> '' then
    RadioGroup1.ItemIndex := StrToInt(leIni(Self.Name, RadioGroup1.Name));

  {if leIni(Self.Name, edDias.Name) <> '' then
    edDias.Text := leIni(Self.Name, edDias.Name); }
end;

procedure TFRelatorioClientesVSCompras.RadioGroup1Click(Sender: TObject);
begin
  inherited;
if RadioGroup1.ItemIndex = 3 then
 begin
  RadioGroup2.Enabled := true;
 end else
 begin
  RadioGroup2.Enabled := false;
 end;

end;

procedure TFRelatorioClientesVSCompras.btnExecutarClick(Sender: TObject);
begin

  if CheckBox3.Checked then
    RLBand2.Height := 31
  else
    RLBand2.Height := 15;


  if CheckBox2.Checked then
    RLBand4.Height := 15
  else
    RLBand4.Height := 0;


  inherited;
end;

procedure TFRelatorioClientesVSCompras.CheckBox4Click(Sender: TObject);
begin
  inherited;

   if (CheckBox1.Checked = false) and (CheckBox4.Checked = true) then
   begin
     DateEdit1.Enabled:=true;
     DateEdit2.Enabled:=true;

   end else begin
     DateEdit1.Enabled:=false;
     DateEdit2.Enabled:=false;
     DateEdit1.Text:='';
     DateEdit2.Text:='';
   end;

end;

procedure TFRelatorioClientesVSCompras.CheckBox1Click(Sender: TObject);
begin
  inherited;

  if (CheckBox1.Checked = true) and (CheckBox4.Checked = true) then
   begin
     DateEdit1.Enabled:=false;
     DateEdit2.Enabled:=false;
     DateEdit1.Text:='';
     DateEdit2.Text:='';
   end else if (CheckBox1.Checked = false) and (CheckBox4.Checked = true) then  begin
     DateEdit1.Enabled:=true;
     DateEdit2.Enabled:=true;
   end;


end;

end.
